package cn.zhz.gen.core;

/**
 * @author ZHZ
 * @since 2023-01-18
 */
public class FastModelConfig {

    /**
     * 每页显示条数属性名称
     */
    private String pageSizeProperty;
    /**
     * 当前页属性名称
     */
    private String pageNoProperty;
    /**
     * basePo类
     */
    private Class<?> basePoClass;
    /**
     * 分页参数类
     */
    private Class<?> pageParamClass;
    /**
     * 是否开启format注解-默认开启
     * {@link com.fasterxml.jackson.annotation.JsonFormat}
     * {@link org.springframework.format.annotation.DateTimeFormat}
     * Long转string 和 时间格式
     */
    private boolean format = true;

    /**
     * 第一步创建（唯一入口）
     *
     * @return
     */
    public static FastModelConfig create() {
        return new FastModelConfig();
    }

    /**
     * 关闭format注解-默认开启
     * {@link com.fasterxml.jackson.annotation.JsonFormat}
     * {@link org.springframework.format.annotation.DateTimeFormat}
     * Long转string 和 时间格式
     */
    public FastModelConfig disableFormat() {
        this.format = false;
        return this;
    }


    /**
     * 配置每页显示条数属性名称
     *
     * @param pageSizeProperty
     * @return
     */
    public FastModelConfig pageSizeProperty(String pageSizeProperty) {
        this.pageSizeProperty = pageSizeProperty;
        return this;
    }

    /**
     * 配置当前页属性名称
     *
     * @param pageNoProperty
     * @return
     */
    public FastModelConfig pageNoProperty(String pageNoProperty) {
        this.pageNoProperty = pageNoProperty;
        return this;
    }

    /**
     * 配置basePo类
     *
     * @param basePoClass
     * @return
     */
    public FastModelConfig basePoClass(Class<?> basePoClass) {
        this.basePoClass = basePoClass;
        return this;
    }
    /**
     * 配置分页参数类
     *
     * @param pageParamClass
     * @return
     */
    public FastModelConfig pageParamClass(Class<?> pageParamClass) {
        this.pageParamClass = pageParamClass;
        return this;
    }

    protected String getPageSizeProperty() {
        return pageSizeProperty;
    }

    protected String getPageNoProperty() {
        return pageNoProperty;
    }

    protected boolean isFormat() {
        return format;
    }

    protected Class<?> getBasePoClass() {
        return basePoClass;
    }

    protected Class<?> getPageParamClass() {
        return pageParamClass;
    }
}
